home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / chaosexe.zip / XPENDLYA.TRU < prev    next >
Text File  |  1980-01-01  |  4KB  |  169 lines

  1. !PROGRAM TITLE "XPENDLYA"
  2. LIBRARY "SGLIB.TRC"
  3. DIM A(1),B(1)
  4. CLEAR
  5. PRINT"                      ***PENDULUM - LYAPUNOV EXPONENTS***"
  6. PRINT
  7. PRINT"THIS PROGRAM CALCULATES THE 3 LYAPUNOV EXPONENTS FOR THE DRIVEN PENDULUM"
  8. PRINT"USING THE ALGORITHM OF WOLF ET AL.  THE EXPONENTS ARE SMOOTHED OVER "
  9. PRINT"MANY DRIVE CYCLES (ORBITS)."
  10. !
  11. !N=# OF NONLINEAR EQUTNS., NN= TOTAL # OF EQUATIONS
  12. LET N=3
  13. LET NN=12
  14. DECLARE DEF YPRIM
  15. !
  16. DIM Y(12), ZNORM(3), GSC(3), CUM(3), YNEW(12)
  17. !
  18. !INITIAL CONDITIONS FOR NONLINEAR SYSTEM
  19. LET Y(1)=.5
  20. LET Y(2)=0
  21. LET Y(3)=0
  22. !
  23. !INITIAL CONDITIONS FOR LINEAR SYSTEM (ORTHONORMAL FRAME)
  24. FOR  I= N+1 TO NN
  25.     LET Y(I)=0.0
  26. NEXT I
  27. FOR I=1 TO n
  28.     LET Y((N+1)*I) = 1.0
  29.     LET CUM(I)=0.0
  30. NEXT I
  31. !
  32. INPUT PROMPT"INTEGRATION STEPSIZE (TRY 0.5):":TSTEP
  33. INPUT PROMPT"NUMBER OF ORBITS:":NUMORBITS
  34. INPUT PROMPT"DRIVING FORCE:":G
  35. INPUT PROMPT"DRIVE FREQUENCY:":W
  36. INPUT PROMPT"DAMPING FACTOR:":Q
  37. INPUT PROMPT"LOG BASE (1)NATURAL (2)INF0-2 CHOOSE 1 OR 2:":BASE
  38. !
  39. !SET UP GRAPHICS
  40. IF BASE=1 THEN CALL SETYSCALE(-.7,.3)
  41. IF BASE=2 THEN CALL SETYSCALE(-1,.5)
  42. CALL SETXSCALE(0,NUMORBITS)
  43. CALL SETTEXT("PENDULUM - LYAPUNOV EXPONENTS","# DRIVE CYCLES","LYAP. EXPS.")
  44. CALL SETAXES(0)
  45. CALL RESERVELEGEND
  46. DATA 0,0
  47. CALL DATAGRAPH(A,B,1,0,"WHITE")
  48. CALL GOTOCANVAS
  49. DO WHILE Y(3)<2*PI*NUMORBITS
  50.    !INITIALIZE INTEGRATOR
  51.    CALL  RKK4(Y(),NN,TSTEP,Q,W,G,YNEW())
  52.    FOR K=1 TO 12
  53.        LET Y(K)=YNEW(K)
  54.    NEXT K
  55.    ! 
  56.    !CONSTRUCT A NEW ORTHONORMAL BASIS BY GRAM-SCHMIDT METHOD
  57.    !NORMALIZE FIRST VECTOR
  58.    LET ZNORM(1)=0.0
  59.    FOR J = 1 TO N
  60.        LET ZNORM(1) = ZNORM(1) +Y(N*J+1)^2
  61.    NEXT J
  62.    LET ZNORM(1)=(ZNORM(1))^.5
  63.    FOR J=1 TO N
  64.        LET Y(N*J+1)=Y(N*J+1)/ZNORM(1)
  65.    NEXT J
  66.    ! 
  67.    !GENERATE THE NEW ORTHONORMAL SET OF VECTORS
  68.    FOR J=2 TO N
  69.        !  GENERATE J-1 COEFFICIENTS
  70.        FOR K = 1 TO (J-1)
  71.            LET GSC(K)=0.0
  72.            FOR L = 1 TO N
  73.                LET GSC(K) = GSC(K) + Y(N*L+J)*Y(N*L+K)
  74.            NEXT L
  75.        NEXT K
  76.        !
  77.        ! CONSTRUCT A NEW VECTOR
  78.        FOR K = 1 TO N
  79.            FOR L= 1 TO J-1
  80.                LET Y(N*K+J) = Y(N*K+J) -GSC(L)*Y(N*K+L)
  81.            NEXT L
  82.        NEXT K
  83.        !
  84.        ! CALCULATE THE VECTOR'S NORM
  85.        LET ZNORM(J) = 0.0
  86.        FOR K= 1 TO N
  87.            LET ZNORM(J) = ZNORM(J)+Y(N*K+J)^2
  88.        NEXT K
  89.        LET ZNORM(J) = (ZNORM(J))^.5
  90.        !
  91.        ! NORMALIZE THE NEW VECTOR
  92.        FOR K = 1 TO N
  93.            LET Y(N*K+J) = Y(N*K+J)/ZNORM(J)
  94.        NEXT K
  95.    NEXT J
  96.    !
  97.    ! UPDATE RUNNING VECTOR MAGNITUDES
  98.    FOR K = 1 TO N
  99.        LET CUM(K) = CUM(K) +LOG(ZNORM(K))
  100.        IF BASE = 2 THEN LET CUM(K) = CUM(K)/LOG(2)
  101.    NEXT K
  102.    !
  103.    !NORMALIZE EXPONENT AND PLOT EXPONENTS
  104.    IF Y(3)>0 THEN
  105.       LET T=Y(3)/W
  106.       FOR K = 1 TO N
  107.           LET CUMKT=CUM(K)/T
  108.           CALL GRAPHPOINT(T*W/(2*PI),CUMKT,1)
  109.       NEXT K
  110.    END IF
  111.  
  112. LOOP
  113. !
  114. CALL ADDLEGEND("G="&STR$(G)&"  Q="&STR$(Q)&"  W="&STR$(W),0,1,"WHITE")
  115. CALL DRAWLEGEND
  116. END
  117. !
  118. SUB RKK4(Y(),NN,TSTEP,Q,W,G,YNEW())
  119.     DIM Y1(12), Y2(12), Y3(12), Y4(12), YY1(12), YY2(12), YY3(12)
  120.     DECLARE DEF YPRIM
  121.     FOR K= 1 TO NN
  122.         LET Y1(K)=TSTEP*YPRIM(Y(),K,Q,W,G)
  123.     NEXT K
  124.     FOR K= 1 TO NN
  125.         LET YY1(K)=Y(K)+Y1(K)/2
  126.     NEXT K
  127.     FOR K=1 TO NN
  128.         LET Y2(K)=TSTEP*YPRIM(YY1(),K,Q,W,G)
  129.     NEXT K
  130.     FOR K = 1 TO NN
  131.         LET YY2(K)=Y(K)+Y2(K)/2
  132.     NEXT K
  133.     FOR K = 1 TO NN
  134.         LET Y3(K)=TSTEP*YPRIM(YY2(),K,Q,W,G)
  135.     NEXT K
  136.     FOR K = 1 TO NN
  137.         LET YY3(K)=Y(K)+Y3(K)
  138.     NEXT K
  139.     FOR K= 1 TO NN
  140.         LET Y4(K)=TSTEP*YPRIM(YY3(),K,Q,W,G)
  141.     NEXT K
  142.     FOR K = 1 TO NN
  143.         LET YNEW(K) = Y(K)+(Y1(K) +2*Y2(K)+2*Y3(K)+Y4(K))/6
  144.     NEXT K
  145. END SUB
  146.  
  147.  
  148.  
  149. !DEFINE DERIVATIVES FUNCTIONS
  150. DEF YPRIM(Y(),K,Q,W,G)
  151.     IF K=1 THEN LET YPRIM=-Y(1)/Q-SIN(Y(2))+G*COS(Y(3))
  152.     IF K=2 THEN LET YPRIM=Y(1)
  153.     IF K=3 THEN LET YPRIM=W
  154.     IF K>3 THEN
  155.        IF K<7 THEN
  156.           LET I = K-4
  157.           LET YPRIM=-Y(4+I)/Q-Y(7+I)*COS(Y(2))+G*Y(10+I)*COS(Y(3))
  158.        END IF
  159.     END IF
  160.     IF K>6 THEN
  161.        IF K<10 THEN
  162.           LET I = K-7
  163.           LET YPRIM=Y(4+I)
  164.        END IF
  165.     END IF
  166.     IF K>9  THEN LET YPRIM = 0
  167. END DEF
  168.